Many data analysis tasks involve analyzing a process that evolves over time. These tasks span a wide range of problems including financial data, network monitoring, and users' web activity. As the process evolves over time, the data far in the past becomes less relevant, and it is natural to weight recent items more heavily. This weighting, however, does not reduce the size of the data. In many streaming systems (e.g., for financial or network data) data must be ingested and processed at extremely high rates. Coping with these high rates under memory constraints often involves constructing predefined aggregates, sketches that summarize the data, or random samples. Of these methods, sampling is the most flexible. Nearly any question about the data (whether posed beforehand or afterwards) can be answered using sampled data. Statistical or machine learning methods, such as logistic regression, which require data at the item level, can then be applied to the sampled data to answer the questions about the data.